package com.zp.self.module.level_4_算法练习.数学.数学推理;

import java.util.Arrays;

/**
 * @author By ZengPeng
 */
public class 力扣_976_三角形的最大周长 {
    //测试
    public static void main(String[] args) {

        System.out.println(new 力扣_976_三角形的最大周长().largestPerimeter(new int[]{2,1,2}));
        System.out.println(new 力扣_976_三角形的最大周长().largestPerimeter(new int[]{1,2,1}));
    }

    /**
    题目：给定由一些正数（代表长度）组成的数组 nums ，返回 由其中三个长度组成的、面积不为零的三角形的最大周长 。
          如果不能形成任何面积不为零的三角形，返回 0。

     示例 1：
     输入：nums = [2,1,2]
     输出：5

     示例 2：
     输入：nums = [1,2,1]
     输出：0

    分析：【perfect】
       1. 排序、遍历、左右指针
            变量记录自大值,注意三角形的必须条件：a+b >c  ,排序后大小顺序可知
       2.思考如何快速定位到最优解？  优化：倒转方向，从大的开始 (n-1) + n-2 >n  return次答案  ,否则i--;
    边界值 & 注意点：
       1.
     **/
    public int largestPerimeter(int[] nums) {
        Arrays.sort(nums);
        for (int i = nums.length-1; i >= 2; i--) {
            if(nums[i-2]+nums[i-1] >nums[i]) return  nums[i-2]+nums[i-1] + nums[i];
        }
        return  0;

       /* 1.排序、遍历、左右指针
        Arrays.sort(nums);
        int perimeter =0,left,right;
        for (int i = 0; i < nums.length; i++) {
            left=i+1;right=nums.length-1;
            while (left<right){
                if(nums[right]>=nums[i]+nums[left])
                    right--;
                else
                    perimeter = Math.max(perimeter,nums[i]+nums[left++]+nums[right]);
            }
        }
        return  perimeter;*/
    }
}
